<!DOCTYPE html>
<html lang="zh-cn">
<head>

    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />

  	<meta property="og:title" content=" W - 用三种语言实现毕业设计之后的一些想法 &middot;  FNL" />
  	<meta property="og:site_name" content="FNL" />
  	<meta property="og:url" content="http://blog.im404.me/post/implement-graduate-design-in-many-ways/" />

    
  	<meta property="og:type" content="article" />

    <meta property="og:article:published_time" content="2017-03-05T22:51:22&#43;08:00" />

    
    <meta property="og:article:tag" content="GO" />
    
    <meta property="og:article:tag" content="godot" />
    
    

  <title>
     W - 用三种语言实现毕业设计之后的一些想法 &middot;  FNL
  </title>

    <meta name="description" content="Fun things first?" />

    <meta name="HandheldFriendly" content="True" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />

    <link rel="shortcut icon" href="http://blog.im404.me/images/favicon.ico">
	  <link rel="apple-touch-icon" href="http://blog.im404.me/images/apple-touch-icon.png" />

    <link rel="stylesheet" type="text/css" href="http://blog.im404.me/css/screen.css" />
    <link rel="stylesheet" type="text/css" href="http://blog.im404.me/css/nav.css" />
    <link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Merriweather:300,700,700italic,300italic|Open+Sans:700,400|Inconsolata" />


    
      
          <link href="http://blog.im404.me/index.xml" rel="alternate" type="application/rss+xml" title="FNL" />
      
      
    
    <meta name="generator" content="Hugo 0.18.1" />

    <link rel="canonical" href="http://blog.im404.me/post/implement-graduate-design-in-many-ways/" />

    

    
</head>
<body class="nav-closed">

  <div class="nav">
    <h3 class="nav-title">Menu</h3>
    <a href="#" class="nav-close">
        <span class="hidden">Close</span>
    </a>
    <ul>
        
        
        
            
            <li class="nav-opened" role="presentation">
            	<a href="http://blog.im404.me/">文章</a>
            </li>
        
            
            <li class="nav-opened" role="presentation">
            	<a href="http://blog.im404.me/about/">关于</a>
            </li>
        
    </ul>
    
    
    <a class="subscribe-button icon-feed" href="http://blog.im404.me/index.xml">Subscribe</a>
    
</div>
<span class="nav-cover"></span>


 <div class="site-wrapper">




<header class="main-header post-head no-cover">
  <nav class="main-nav clearfix">


  
      <a class="blog-logo" href="http://blog.im404.me/"><img src="http://blog.im404.me/images/logo.ico" alt="Home" /></a>
  
  
      <a class="menu-button" href="#"><span class="burger">&#9776;</span><span class="word">Menu</span></a>
  
  </nav>
</header>



<main class="content" role="main">




  <article class="post post">

    <header class="post-header">
        <h1 class="post-title">W - 用三种语言实现毕业设计之后的一些想法</h1>
        <small></small>

        <section class="post-meta">
        
          <time class="post-date" datetime="2017-03-05T22:51:22&#43;08:00">
            Mar 5, 2017
          </time>
        
         
          <span class="post-tag small"><a href="http://blog.im404.me/tags/GO/">#GO</a></span>
         
          <span class="post-tag small"><a href="http://blog.im404.me/tags/godot/">#godot</a></span>
         
        </section>
    </header>

    <section class="post-content">
      <p>其实在我最初接到毕业设计课题的时候就已经有了用多种语言去实现的想法，<del>（可能是因为我太想装逼了吧）</del> 可惜当时我的能力有限，还要找工作啥的，刚到公司一些东西也还在熟悉之中，所以就只是用了C++以及最笨的思路去实现，总算把东西做完了吧，结果还要是有问题的，具体就不说啦，想看的可以到文末的地址去看代码。</p>

<h2 id="那么是为什么要把毕业设计重新写一遍呢">那么是为什么要把毕业设计重新写一遍呢？</h2>

<p>作为一个宅男，我其实一直都想做一个游戏出来，那么正好在最近工作稳定下来了，也就有了时间去研究这方面的东西。<br />
最近呢，我正在看godot这个游戏引擎的相关教程，在这个教程中的一段，讲到了<a href="http://gameprogrammingpatterns.com/state.html">“有限状态机”</a>这样的编程模式，在跟着教程做了一遍之后觉得这样的思路不仅方便写，而且很易读，因为每一个“状态”都只需要处理当前“状态”的内容，不需要在代码中添加无数的<code>if</code>和<code>else</code>，程序的执行效率也会因此快很多。<br />
再一想，好像我的毕业设计也能用这个思路来写啊！正好在学这个游戏引擎呢，那就拿这个来练练手也不错。<br />
于是，我就用了go语言和godot来实现了这个毕业设计。接下来是一些心得。</p>

<h2 id="go">GO</h2>

<p>google出的语言，易写速度快（比C++慢），格式统一，常用于写服务器应用。<br />
刚开始写的时候有点找不到方向，GO是没有类的！所以按照godot教程里面每一个状态都用类来表示这种做法是不可行的。<br />
找了半天才知道类似的思路需要用到接口来实现，定义完接口的函数之后就可用结构体来“包含”这个接口，这样以来就实现了一个类似面向对象编程语言中的“基类”，需要“继承”的结构体包含这个“基类”就可以了。<br />
搞清楚了这一点，接下来的程序就简单很多了，纯ALOHA算法中把标签状态定义为两个，等包和发包，时隙ALOHA算法把标签状态定义为三个，等包和等时隙还有发包。再接下来就是处理碰撞的问题了。写纯ALOHA算法大概用了两三天，时隙ALOHA算法也就是在纯ALOHA算法上添加了“时隙”这个概念罢了，改改就行。</p>

<h2 id="godot">godot</h2>

<p>一个免费开源的游戏引擎，可以用来做2/3D的游戏，有自己的一种编程语言（据说是经过多种脚本语言的实验后发现还不如自己开发一种语言来的实在）GDscript，是一种类似语法类似Python的动态类型语言。<br />
因为我是先用go语言实现“有限状态机”的编程思路的，所以在写godot时候直接照搬代码就行了，在我把标签和一些界面上的东西差不多写好了就要开始写主要控制代码的时候，我才发现GDscript没有长整形（long 或 int64)，这对于要实现精确到毫秒的时间模拟来说是比较不利的，要知道一秒钟就是1000毫秒。<br />
所以像C++和go那样用一个变量来保存所有模拟时间是不行的了，只能用逐层减一的方法，比如模拟运行的秒运行完了就会将分减一，秒变为59再去运行。<br />
然后我又发现了一个问题，如果像之前那样在模拟开始就将整个需要模拟的时间for循环跑完是会将界面卡住的，我的解决办法是在代码的每一个运算帧中去模拟下一个秒（当然也可以是毫秒）。<br />
当然这个程序是有界面的，我分别照着网上的标签和读写器图片画了两张像素画图片。<br />
<del>不过最后我没有写完</del></p>

<h2 id="总结">总结</h2>

<p>每种语言都有自己的坑，也有自己的长处，我其实还用C#写了一点，但是没有发出来，因为写到后面觉得没意思，就放弃了。<br />
这其实是一次心血来潮的撸码，不过正如很多前辈所说，学一门编程语言最重要的就是实践，多写自然就会了，有些坑还是要踩过才知道啊。恰巧我的毕业设计说不上复杂也说不上简单，拿来练手是最好不过了。<br />
最后附上<a href="https://github.com/fengjiongmax/RFID-Aloha-anti-collition-emulation">github地址</a></p>
    </section>


  <footer class="post-footer">


    
    <figure class="author-image">
        <a class="img" href="http://blog.im404.me/" style="background-image: url(http://blog.im404.me/images/logo.ico)"><span class="hidden">fjmax's Picture</span></a>
    </figure>
    

    





<section class="author">
  <h4><a href="http://blog.im404.me/">fjmax</a></h4>
  
  <p>programmer and dreamer</p>
  
  <div class="author-meta">
    
    <span class="author-link icon-link"><a href="http://blog.im404.me">http://blog.im404.me</a></span>
  </div>
</section>



    
<section class="share">
  <h4>Share this post</h4>
  <a class="icon-twitter" style="font-size: 1.4em" href="https://twitter.com/share?text=W%20-%20%e7%94%a8%e4%b8%89%e7%a7%8d%e8%af%ad%e8%a8%80%e5%ae%9e%e7%8e%b0%e6%af%95%e4%b8%9a%e8%ae%be%e8%ae%a1%e4%b9%8b%e5%90%8e%e7%9a%84%e4%b8%80%e4%ba%9b%e6%83%b3%e6%b3%95&nbsp;-&nbsp;FNL&amp;url=http%3a%2f%2fblog.im404.me%2fpost%2fimplement-graduate-design-in-many-ways%2f"
      onclick="window.open(this.href, 'twitter-share', 'width=550,height=235');return false;">
      <span class="hidden">Twitter</span>
  </a>
  <a class="icon-facebook" style="font-size: 1.4em" href="https://www.facebook.com/sharer/sharer.php?u=http%3a%2f%2fblog.im404.me%2fpost%2fimplement-graduate-design-in-many-ways%2f"
      onclick="window.open(this.href, 'facebook-share','width=580,height=296');return false;">
      <span class="hidden">Facebook</span>
  </a>
  <a class="icon-pinterest" style="font-size: 1.4em" href="http://pinterest.com/pin/create/button/?url=http%3a%2f%2fblog.im404.me%2fpost%2fimplement-graduate-design-in-many-ways%2f&amp;description=W%20-%20%e7%94%a8%e4%b8%89%e7%a7%8d%e8%af%ad%e8%a8%80%e5%ae%9e%e7%8e%b0%e6%af%95%e4%b8%9a%e8%ae%be%e8%ae%a1%e4%b9%8b%e5%90%8e%e7%9a%84%e4%b8%80%e4%ba%9b%e6%83%b3%e6%b3%95"
      onclick="window.open(this.href, 'pinterest-share','width=580,height=296');return false;">
      <span class="hidden">Pinterest</span>
  </a>
  <a class="icon-google-plus" style="font-size: 1.4em" href="https://plus.google.com/share?url=http%3a%2f%2fblog.im404.me%2fpost%2fimplement-graduate-design-in-many-ways%2f"
     onclick="window.open(this.href, 'google-plus-share', 'width=490,height=530');return false;">
      <span class="hidden">Google+</span>
  </a>
</section>



    

<div id="disqus_thread"></div>
<script type="text/javascript">
  var disqus_shortname = 'fjmax';
  var disqus_url = 'http:\/\/blog.im404.me\/post\/implement-graduate-design-in-many-ways\/';
  (function() {
    var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
    dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
    (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
  })();
</script>
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>




  </footer>
</article>

</main>
    <footer class="site-footer clearfix">
        <section class="copyright"><a href="">FNL</a> All rights reserved - 2016</section>
        
        <section class="poweredby">Proudly generated by <a class="icon-hugo" href="http://gohugo.io">HUGO</a>, with <a class="icon-theme" href="https://github.com/vjeantet/hugo-theme-casper">Casper</a> theme</section>
        
    </footer>
    </div>
    <script type="text/javascript" src="http://blog.im404.me/js/jquery.js"></script>
    <script type="text/javascript" src="http://blog.im404.me/js/jquery.fitvids.js"></script>
    <script type="text/javascript" src="http://blog.im404.me/js/index.js"></script>
    
</body>
</html>

